<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>HTML重复属性行为分析</title>
    <style>
        * {
            box-sizing: border-box;
            margin: 0;
            padding: 0;
        }
        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            line-height: 1.6;
            color: #333;
            background-color: #f5f7fa;
            padding: 20px;
        }
        .container {
            max-width: 1200px;
            margin: 0 auto;
        }
        header {
            text-align: center;
            margin-bottom: 40px;
            padding: 20px;
            background: linear-gradient(135deg, #6a11cb 0%, #2575fc 100%);
            color: white;
            border-radius: 10px;
            box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
        }
        h1 {
            font-size: 2.5rem;
            margin-bottom: 10px;
        }
        .intro {
            font-size: 1.2rem;
            margin-bottom: 30px;
            text-align: center;
            max-width: 800px;
            margin-left: auto;
            margin-right: auto;
        }
        .card {
            background: white;
            border-radius: 10px;
            padding: 25px;
            margin-bottom: 30px;
            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.05);
            transition: transform 0.3s ease;
        }
        .card:hover {
            transform: translateY(-5px);
        }
        .card h2 {
            color: #2575fc;
            margin-bottom: 20px;
            padding-bottom: 10px;
            border-bottom: 2px solid #f0f0f0;
        }
        .test-area {
            display: flex;
            flex-wrap: wrap;
            gap: 20px;
            margin-top: 20px;
        }
        .test-case {
            flex: 1;
            min-width: 300px;
            border: 1px solid #e0e0e0;
            border-radius: 8px;
            padding: 15px;
            background-color: #f9f9f9;
        }
        .test-case h3 {
            margin-bottom: 10px;
            color: #333;
        }
        .code {
            background-color: #2d2d2d;
            color: #f8f8f2;
            padding: 15px;
            border-radius: 5px;
            font-family: 'Courier New', monospace;
            overflow-x: auto;
            margin: 15px 0;
        }
        .result {
            background-color: #e8f4fd;
            padding: 15px;
            border-radius: 5px;
            margin-top: 15px;
            border-left: 4px solid #2575fc;
        }
        table {
            width: 100%;
            border-collapse: collapse;
            margin: 20px 0;
        }
        th, td {
            padding: 12px 15px;
            text-align: left;
            border-bottom: 1px solid #e0e0e0;
        }
        th {
            background-color: #f2f6fc;
            font-weight: 600;
        }
        tr:hover {
            background-color: #f5f9ff;
        }
        .summary {
            background-color: #e8f5e9;
            padding: 20px;
            border-radius: 8px;
            margin-top: 30px;
            border-left: 4px solid #4caf50;
        }
        .highlight {
            background-color: #fff9c4;
            padding: 2px 5px;
            border-radius: 3px;
        }
        .test-button {
            background-color: #2575fc;
            color: white;
            border: none;
            padding: 10px 20px;
            border-radius: 5px;
            cursor: pointer;
            font-size: 1rem;
            margin-top: 10px;
            transition: background-color 0.3s;
        }
        .test-button:hover {
            background-color: #1a65e0;
        }
        footer {
            text-align: center;
            margin-top: 40px;
            padding: 20px;
            color: #666;
            font-size: 0.9rem;
        }
    </style>
</head>
<body>
    <div class="container">
        <header>
            <h1>HTML元素重复属性行为分析</h1>
            <p>探索当HTML元素包含重复属性时浏览器的处理方式</p>
        </header>

        <div class="intro">
            <p>在HTML中，当同一个元素有两个相同的属性时，浏览器的处理方式取决于属性的类型。本页面通过实际示例演示不同情况下的行为。</p>
        </div>

        <div class="card">
            <h2>属性重复的一般规则</h2>
            <p>在大多数情况下，当HTML元素有重复的属性时，浏览器会使用第一个出现的属性值，忽略后续的重复属性。但某些特殊属性可能有不同的处理方式。</p>
            
            <table>
                <thead>
                    <tr>
                        <th>属性类型</th>
                        <th>行为</th>
                        <th>示例</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>标准属性 (id, class, style等)</td>
                        <td>使用第一个值，忽略后续重复</td>
                        <td>&lt;div id="first" id="second"&gt; → id="first"</td>
                    </tr>
                    <tr>
                        <td>布尔属性 (disabled, checked等)</td>
                        <td>只要存在就生效，无论出现次数</td>
                        <td>&lt;input disabled disabled&gt; → 元素被禁用</td>
                    </tr>
                    <tr>
                        <td>自定义数据属性 (data-*)</td>
                        <td>使用第一个值，忽略后续重复</td>
                        <td>&lt;div data-id="1" data-id="2"&gt; → data-id="1"</td>
                    </tr>
                    <tr>
                        <td>某些特殊属性 (src, href)</td>
                        <td>使用第一个值，忽略后续重复</td>
                        <td>&lt;img src="first.jpg" src="second.jpg"&gt; → 加载first.jpg</td>
                    </tr>
                </tbody>
            </table>
        </div>

        <div class="card">
            <h2>实际测试示例</h2>
            <p>以下示例展示了不同情况下重复属性的实际效果：</p>
            
            <div class="test-area">
                <div class="test-case">
                    <h3>1. ID属性重复</h3>
                    <div class="code" id="testId">
                      <div id="first-id" id="second-id">ID测试元素</div>
                    </div>
                    <div class="result">
                        <p>实际ID值: <span id="id-result">正在检测...</span></p>
                    </div>
                    <button class="test-button" onclick="testId()">测试ID属性</button>
                </div>
                
                <div class="test-case">
                    <h3>2. Class属性重复</h3>
                    <div class="code" id="testClass">
                      <div class="class-a" class="class-b">Class测试元素</div>
                    </div>
                    <div class="result">
                        <p>实际Class值: <span id="class-result">正在检测...</span></p>
                    </div>
                    <button class="test-button" onclick="testClass()">测试Class属性</button>
                </div>
                
                <div class="test-case">
                    <h3>3. 布尔属性重复</h3>
                    <div class="code" id="testAttr">
                      <input type="checkbox" checked checked="false">
                    </div>
                    <div class="result">
                        <p>复选框状态: <span id="attr-result">正在检测...</span></p>
                    </div>
                    <button class="test-button" onclick="testAttr()">测试Checked属性</button>
                </div>
            </div>
            
            <div class="test-area">
                <div class="test-case">
                    <h3>4. Style属性重复</h3>
                    <div class="code" id="testStyle">
                      <div style="color: red;" style="color: blue;">样式测试文本</div>
                    </div>
                    <div class="result">
                        <p>实际文本颜色: <span id="style-result">正在检测...</span></p>
                    </div>
                    <button class="test-button" onclick="testStyle()">测试Style属性</button>
                </div>
                
                <div class="test-case">
                    <h3>5. Data属性重复</h3>
                    <div class="code" id="testData">
                      <div data-value="first" data-value="second">数据属性测试</div>
                    </div>
                    <div class="result">
                        <p>实际data-value值: <span id="data-result">正在检测...</span></p>
                    </div>
                    <button class="test-button" onclick="testData()">测试Data属性</button>
                </div>
                
                <div class="test-case">
                    <h3>6. Src属性重复</h3>
                    <div class="code" id="testSrc">
                      <img src="https://via.placeholder.com/150/FF0000" src="https://via.placeholder.com/150/0000FF" alt="测试图像">
                    </div>
                    <div class="result">
                        <p>实际加载的图像: <span id="src-result">正在检测...</span></p>
                    </div>
                    <button class="test-button" onclick="testSrc()">测试Src属性</button>
                </div>
            </div>
        </div>

        <div class="card summary">
            <h2>总结</h2>
            <p>根据HTML规范，当元素有重复属性时，通常遵循以下规则：</p>
            <ul>
                <li>对于大多数标准属性，浏览器会使用第一个出现的属性值，忽略后续重复的属性</li>
                <li>对于布尔属性（如disabled、checked等），只要属性存在就会生效，无论出现次数</li>
                <li>虽然浏览器通常会忽略重复属性，但编写具有重复属性的HTML是不符合规范的，应该避免</li>
                <li>在实际开发中，应确保每个属性在元素中只出现一次，以保证代码的可读性和一致性</li>
            </ul>
            <p>使用<span class="highlight">验证工具</span>检查HTML代码可以帮助发现和修复重复属性问题。</p>
        </div>

        <footer>
            <p>HTML重复属性行为演示 &copy; 2023</p>
        </footer>
    </div>

    <script>
        // 测试ID属性
        function testId() {
            const testElement = document.querySelector('#testId > *');
            document.getElementById('id-result').textContent = testElement.id;
        }
        
        // 测试Class属性
        function testClass() {
            const testElement = document.querySelector('#testClass > *');
            document.getElementById('class-result').textContent = testElement.className;
        }
        
        // 测试Checked属性
        function testAttr() {
            const testElement = document.querySelector('#testAttr > *');
            document.getElementById('attr-result').textContent = testElement.checked ? '已选中' : '未选中';
        }
        
        // 测试Style属性
        function testStyle() {
            const testElement = document.querySelector('#testStyle > *');
            const computedStyle = window.getComputedStyle(testElement);
            document.getElementById('style-result').textContent = computedStyle.color;
        }
        
        // 测试Data属性
        function testData() {
            const testElement = document.querySelector('#testData > *');
            document.getElementById('data-result').textContent = testElement.getAttribute('data-value');
        }
        
        // 测试Src属性
        function testSrc() {
            const testElement = document.querySelector('#testSrc > *');
            document.getElementById('src-result').textContent = testElement.src;
        }
        
        // 页面加载时运行所有测试
        window.onload = function() {
            testId();
            testClass();
            testAttr();
            testStyle();
            testData();
            testSrc();
        };
    </script>
</body>
</html>